/**
 * 单线联系人分析器
 * 检测只与嫌疑人单线联系的号码，疑似专用"黑卡"或保密联系人
 */
class SingleContactAnalyzer extends BaseAnalyzer {
    constructor(caseId) {
        super(caseId);
        this.name = '单线联系人';
        this.description = '检测只与嫌疑人（本机）联系，没有其他通话记录的号码';
    }

    /**
     * 执行单线联系人分析
     * @param {Object} params { minCalls: 5 }
     */
    async analyze(params = {}) {
        const minCalls = params.minCalls || 5;

        // 逻辑：
        // 在当前案件的通话记录中，统计每个对方号码的通话次数
        // 注意：由于我们只有嫌疑人的话单，所以所有记录都是与嫌疑人的通话。
        // "单线联系"在单人话单背景下，其实就是找出高频联系人，但通常意义上的单线联系需要全库碰撞。
        // 在单人话单中，我们可以分析该号码的通话特征：
        // 1. 通话频率高
        // 2. (如果有基站数据) 轨迹是否伴随
        // 这里暂时实现为：高频联系人，且通话时间规避正常工作时间（可选）
        // 或者，如果我们有多个嫌疑人的话单，可以检测该号码是否只出现在当前嫌疑人的话单中（需要跨案件或跨话单分析，目前暂不支持）。

        // 修正逻辑：在单人话单中，"单线联系" 只能体现为该号码与机主联系紧密。
        // 我们这里实现为：高频互通，且无短信记录（如果短信数据在另一张表，这里暂不考虑），
        // 或者只在特定时间段联系。

        // 既然是迁移 analysis.js 的逻辑，我们沿用之前的逻辑：
        // 统计通话次数超过阈值的号码。

        const sql = `
            SELECT 
                opp_user_number,
                COUNT(*) as total_calls,
                SUM(duration) as total_duration,
                MIN(start_time) as first_call,
                MAX(start_time) as last_call,
                SUM(CASE WHEN strftime('%H', start_time) BETWEEN '22' AND '06' THEN 1 ELSE 0 END) as night_calls
            FROM call_records
            WHERE case_id = ?
            GROUP BY opp_user_number
            HAVING total_calls >= ?
            ORDER BY total_calls DESC
            LIMIT 50
        `;

        const result = await this.runQuery(sql, [this.caseId, minCalls]);

        if (!result.success) {
            return this.createResult('single_contact', this.name, [], '查询失败: ' + result.message, 'danger');
        }

        const data = result.data;
        const summary = data.length > 0
            ? `发现 ${data.length} 个高频联系人，其中 ${data.filter(r => r.night_calls > 0).length} 个存在深夜通话`
            : '未发现高频联系人';

        const level = data.length > 5 ? 'warning' : (data.length > 0 ? 'info' : 'info');

        return this.createResult('single_contact', this.name, data, summary, level);
    }

    renderResult(data) {
        if (!data || data.length === 0) {
            return '<div class="empty-result" style="padding:40px; text-align:center; color:#999;">✓ 未发现高频联系人</div>';
        }

        let html = `
      <div class="result-summary" style="padding:15px; background:#e8f4ff; border-left:4px solid #409eff; margin-bottom:15px;">
        <strong>📞 发现 ${data.length} 个高频联系人</strong>
        <p style="margin:5px 0 0; font-size:0.9rem;">这些号码与机主联系频繁，可能为重要关系人</p>
      </div>
      
      <table class="analysis-result-table" style="width:100%; border-collapse:collapse; font-size:0.9rem;">
        <thead style="background:#f5f7fa;">
          <tr>
            <th style="padding:10px; border:1px solid #e0e0e0;">对方号码</th>
            <th style="padding:10px; border:1px solid #e0e0e0; text-align:center; background:#e8f4ff;">通话次数</th>
            <th style="padding:10px; border:1px solid #e0e0e0; text-align:right;">总时长(秒)</th>
            <th style="padding:10px; border:1px solid #e0e0e0; text-align:center;">深夜通话</th>
            <th style="padding:10px; border:1px solid #e0e0e0;">时间跨度</th>
          </tr>
        </thead>
        <tbody>
    `;

        data.forEach((row, index) => {
            const rowStyle = index % 2 === 0 ? 'background:#fafafa;' : '';
            html += `<tr style="${rowStyle}">`;
            html += `<td style="padding:8px; border:1px solid #e0e0e0; font-family:monospace;">${row.opp_user_number || ''}</td>`;
            html += `<td style="padding:8px; border:1px solid #e0e0e0; text-align:center; font-weight:bold; color:#409eff;">${row.total_calls}</td>`;
            html += `<td style="padding:8px; border:1px solid #e0e0e0; text-align:right;">${row.total_duration}</td>`;
            html += `<td style="padding:8px; border:1px solid #e0e0e0; text-align:center; ${row.night_calls > 0 ? 'color:#f56c6c; font-weight:bold;' : 'color:#ccc;'}">${row.night_calls}</td>`;
            html += `<td style="padding:8px; border:1px solid #e0e0e0; font-size:0.85rem;">${this.formatDate(row.first_call)} ~ ${this.formatDate(row.last_call)}</td>`;
            html += '</tr>';
        });

        html += '</tbody></table>';
        return html;
    }
}

window.SingleContactAnalyzer = SingleContactAnalyzer;
